import grails.test.*

class ProductoServicioTests extends GrailsUnitTestCase {

    protected void setUp() {
        super.setUp()
        mockDomain(ProductoServicio)
        ProductoServicio.list()*.delete()
    }

    protected void tearDown() {
        super.tearDown()
    }

    private ProductoServicio createProductoServicio(){
        ProductoServicio ps = new ProductoServicio(
                nombre:'TredaPOS',
                precioBase:1400000,
                caracteristicas:'Punto de Venta')
        return ps
    }

    void testOK() {
        ProductoServicio ps = createProductoServicio()
        assert ps.nombre == 'TredaPOS', 'Error en el nombre'
        assert ps.precioBase == 1400000, 'Error en el precioBase'
        assert ps.caracteristicas == 'Punto de Venta', 'Error en las caracteristicas'
    }

    void testPersist(){
        ProductoServicio ps = createProductoServicio()
        ps.save()
        assertEquals('No se guardo correctamente', ProductoServicio.count(), 1)
        ps.precioBase = -1
        ps.save()
        assertEquals('Un ProductoServicio incorrecto no debe guardarse en la bd', ProductoServicio.count(), 1)
    }

    void testNombre(){
        ProductoServicio ps = createProductoServicio()
        ps.nombre = ''
        assertFalse('El nombre no puede estar en blanco', ps.validate())
        ps.nombre = 'TredaPOS'
        ps.save()
        ProductoServicio ps2 = createProductoServicio()
        ps2.nombre = 'TredaPOS'
        ps2.save()
        assertFalse('El nombre debe ser unico', ps2.validate())
    }

    void testPrecioBase(){
        ProductoServicio ps = createProductoServicio()
        ps.precioBase = null
        assertFalse('El precio no puede ser nulo', ps.validate())
        ps.precioBase = -1
        assertFalse('El precio no puede ser negativo', ps.validate())
        ps.precioBase = 12.55
        assert ps.precioBase == 12.55, 'El precio debe tomar cifras decimales'
    }

    void testCaracteristicas(){
        ProductoServicio ps = createProductoServicio()
        ps.caracteristicas = ''
        assertFalse('Las caracteristicas no pueden estar en blanco', ps.validate())
    }

    void testToString(){
        ProductoServicio ps = createProductoServicio()
        assertEquals(ps.toString(), 'TredaPOS') 
    }

}
